﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProjetoJornada_DAL.Repositorio;
using Basicas;
using Basicas.Utils;
using Basicas.Utils.excecoes;

namespace ProjetoJornada_Negocios.Negocio
{
    public class NegocioMatricula
    {
        private RepMatricula repositorio;
        private NegocioTurma negocioTurma;

        public NegocioMatricula()
        {
            this.repositorio = new RepMatricula();
            this.negocioTurma = new NegocioTurma();
        }

        public Int32 Inserir(Matricula matricula)
        {
            try
            {
                if (matricula != null)
                {
                    if (matricula.Aluno == null)
                    {
                        throw new MatriculaSemAlunoException();
                    }

                    if (matricula.Desconto == null)
                    {
                        matricula.Desconto = new Desconto() { Id = null };
                    }

                    if (matricula.Turma == null)
                    {
                        throw new MatriculaSemTurmaException();
                    }
                    else
                    {
                        if (matricula.Turma.Id <= 0)
                        {
                            throw new MatriculaSemTurmaException();
                        }
                    }

                    if (matricula.FormaPagamento == null)
                    {
                        matricula.FormaPagamento = new FormaPagamento() { Id = null };
                    }

                }

                return this.repositorio.Inserir(matricula);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "Inserir Matricula - Negocio");
                throw ex;
            }

        }

        public bool Editar(Matricula matricula)
        {
            try
            {
                return repositorio.Editar(matricula);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "Editar Matricula - Negocio");
                throw ex;
            }

        }

        public bool Remover(Matricula matricula)
        {
            try
            {
                return repositorio.Remover(matricula);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "Remover Matricula - Negocio");
                throw ex;
            }

        }

        public List<Matricula> BuscarPorTurma(Turma turma)
        {
            try
            {
                return repositorio.BuscarPorTurma(turma.Id);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "Remover Matricula - Negocio");
                throw ex;
            }

        }

        public Matricula BuscarPorId(int matriculaId)
        {
            try
            {
                return repositorio.BuscarPorId(matriculaId);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "BuscarMatriculaPorId - Negocio");
                throw ex;
            }
        }

        public List<Matricula> BuscarPorCpf(string cpf)
        {
            try
            {
                return repositorio.BuscarPorCpf(cpf);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "Remover Matricula - Negocio");
                throw ex;
            }
        }

        public List<Matricula> ConsultarMatriculaPorCPFNaJornada(string cpf, int idJornada)
        {
            try
            {
                return repositorio.ConsultarMatriculaPorCPFNaJornada(cpf, idJornada);
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "Consultar Matricula Por CPF na Jornada - Negocio");
                throw ex;
            }
        }
        
    }
}
